package com.woniuxy.project.send.controller;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MsgController {

    private final RabbitTemplate rabbitTemplate;

    @Autowired
    public MsgController(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    /**
     * 发送消息到RabbitMQ队列
     * 该方法通过HTTP GET请求触发，向simple-queue队列发送10条"Hello,Rabbit!"消息
     *
     * @return String 返回发送结果字符串"发送成功"
     */
    @GetMapping("/send")
    public String send() {
        // 循环发送10条消息到RabbitMQ队列
        for (int i = 0; i < 10; i++)
            rabbitTemplate.convertAndSend("simple-queue", "Hello,Rabbit!");
        return "发送成功";
    }

    /*
     * 创建 Fanout 交换机
     * 1、创建一个交换机：fanout-exchange
     * 2、创建两个队列：queue1-fanout, queue2-fanout
     * 3、将两个队列绑定到交换机
     */

    /**
     * 发送消息到RabbitMQ的fanout交换机（广播模式）
     * 该方法通过HTTP GET请求触发，将指定消息发送到名为"fanout-exchange"的交换机
     *
     * @return String 返回发送结果的提示信息
     */
    @GetMapping("/send2")
    public String send2() {
        // 向fanout交换机发送消息，使用空字符串作为routing key（广播模式）
        rabbitTemplate.convertAndSend("fanout-exchange", "", "Hello,Rabbit!");
        return "发送成功";
    }

    /*
     * 创建 Direct 交换机
     * 1、创建一个交换机：direct-exchange
     * 2、创建两个队列：queue1-direct, queue2-direct
     * 3、将两个队列绑定到交换机    路由key
     *      queue1-direct       a1
     *      queue2-direct       a2
     */

    @GetMapping("/send3")
    public String send3() {
        // 向direct交换机发送消息，使用非空字符串作为routing key（订阅模式）
        rabbitTemplate.convertAndSend("direct-exchange", "a1", "Hello,Rabbit!");
        return "发送成功";
    }

    /*
     * 创建 Topic 交换机（主题模式）
     * 1、创建一个交换机：topic-exchange
     * 2、创建两个队列：queue1-topic, queue2-topic
     * 3、将两个队列绑定到交换机    路由key       交换机
     *      queue1-topic       user.*       topic-exchange
     *      queue2-topic       pers.#       topic-exchange
     */
    @GetMapping("/send4")
    public String send4() {
        // 向topic交换机发送消息，使用通配符作为routing key（主题模式）
        // * 匹配单后缀  # 匹配多后缀
        rabbitTemplate.convertAndSend("topic-exchange", "user.a", "Hello,Rabbit!");
        rabbitTemplate.convertAndSend("topic-exchange", "pers.a.b", "Hello,Rabbit!");
        return "发送成功";
    }

}
